package com.pac.menu.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.common.tools.StringTools;
import com.common.util.ErrorNumber;
import com.common.util.LogicException;
import com.pac.menu.bean.MenuBean;
import com.pac.menu.bean.MenuTreeBean;
import com.pac.menu.dao.MenuDao;
import com.pac.menu.service.MenuService;

/**
 * 菜单service实现
 * 
 * @author lujun.chen
 * @version [版本号, 2015年2月12日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@Service(value = "menuService")
public class MenuServiceImpl implements MenuService {

	private static Logger logger = Logger.getLogger(MenuServiceImpl.class);

	@Autowired
	private MenuDao menuDao;

	/** 列表查询菜单信息 */
	 
	@Override
	public List<MenuBean> queryMenu(MenuBean menuBean) {
		List<MenuBean> menuBeanList = menuDao.queryMenuBean(menuBean);

		return menuBeanList;
	}

	/** 按照用户ID查询用户菜单树  */
	 
	@Override
	public List<MenuBean> menuTree(String userId)  {
		if (StringTools.isNull(userId))
        {
            logger.error("按用户ID查询用户菜单树出错，用户ID为空");
            throw new LogicException(ErrorNumber.PARAM_IS_NULL, "按用户ID查询用户菜单树出错，用户ID为空");
        }
        
        List<MenuBean> menuBeanList = menuDao.queryMenuByUserId(userId);
        
        //构建菜单树
        List<MenuBean> menuTree = createMenuTree("0",menuBeanList);
        
        return menuTree;
	}

	/** 构建菜单树，供角色管理使用 */
	 
	@Override
	public List<MenuTreeBean> createMenuTree() {
		List<MenuBean> menuBeanList = menuDao.queryMenuBean(null);
        List<MenuTreeBean> menuTreeBeanList=createMTree("0",menuBeanList);
        
        return menuTreeBeanList;
	}
	
	/** 构建菜单树
     * <功能详细描述>
     * @param menuBeanList
     * @return
     * @see [类、类#方法、类#成员]
     */
    private List<MenuBean> createMenuTree(String parentId, List<MenuBean> menuBeanList)
    {
        if(null==menuBeanList)
        {
            return null;
        }
        List<MenuBean> menuBeanListR=new ArrayList<MenuBean>();
        for(MenuBean menuBean:menuBeanList)
        {
            if(menuBean.getParentId().equals(parentId))
            {
                MenuBean menuBeanN = menuBean;
                List<MenuBean> menuChild = createMenuTree(menuBeanN.getMenuid(), menuBeanList);
                menuBeanN.setMenus(menuChild);
                menuBeanListR.add(menuBeanN);
            }
        }
        return menuBeanListR;
    }

    
    /** 构建菜单树
     * 角色管理使用
     * @param parentId
     * @param menuBeanList
     * @return
     * @see [类、类#方法、类#成员]
     */
    private List<MenuTreeBean> createMTree(String parentId, List<MenuBean> menuBeanList)
    {
        if(null==menuBeanList)
        {
            return null;
        }
        List<MenuTreeBean> menuTreeBeanListR=new ArrayList<MenuTreeBean>();
        for(MenuBean menuBean:menuBeanList)
        {
            if(menuBean.getParentId().equals(parentId))
            {
                MenuTreeBean menuTreeBean=new MenuTreeBean();
                
                
                List<MenuTreeBean> menuTreeBeanListC=createMTree(menuBean.getMenuid(),menuBeanList);
                
                menuTreeBean.setId(menuBean.getMenuid());
                menuTreeBean.setText(menuBean.getMenuname());
                menuTreeBean.setIconCls(menuBean.getIcon());
                menuTreeBean.setChildren(menuTreeBeanListC);;
                
                menuTreeBeanListR.add(menuTreeBean);
            }
        }
        
        return menuTreeBeanListR;
    }

}
